﻿using Levfier.GUI.EditorControls;
using System;
using System.Windows.Controls;
using System.Windows.Media;

namespace Levfier.GUI.MenuLabels
{
    ///<summary>
    /// プロセッサコントロールを生成できるラベル
    /// </summary>
    /// <typeparam name="T">プロセッサコントロール</typeparam>
    [Serializable]
    public class EditorMenuLabel<T> : Label, IEditorControlCreatable
        where T : EditorControl, new()
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="text">表示名</param>
        public EditorMenuLabel(string text)
        {
            this.Content = text;
            this.Foreground = Brushes.LightGray;
            this.MouseEnter += EditorMenuLabel_MouseEnter;
            this.MouseLeave += EditorMenuLabel_MouseLeave;
        }

        /// <summary>
        /// マウスが領域外に出たときの動作
        /// </summary>
        /// <param name="sender">イベント発生源</param>
        /// <param name="e">イベント</param>
        void EditorMenuLabel_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
        {
            this.Background = new SolidColorBrush(Color.FromArgb(0xFF, 0x18, 0x18, 0x18));
        }

        /// <summary>
        /// マウスが領域内に入ったときの動作
        /// </summary>
        /// <param name="sender">イベント発生源</param>
        /// <param name="e">イベント</param>
        void EditorMenuLabel_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
        {
            this.Background = new SolidColorBrush(Color.FromArgb(0xFF, 0x00, 0xAA, 0xDE));
        }

        /// <summary>
        /// プロセッサコントロールを生成する
        /// </summary>
        /// <returns>プロセッサコントロール</returns>
        public EditorControl CreateEditorControl()
        {
            return new T();
        }
    }
}